package com.hp.bon.sgw.stdbss30.bizSlotOutside;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.hp.bon.sgw.bean.XmlMessage;
import com.hp.bon.sgw.stdbss30.BizSlot;
import com.hp.bon.sgw.stdbss30.utils.HttpClientUtils;
import com.hp.bon.sgw.stdbss30.common.BizConsts;
import com.hp.bon.sgw.stdbss30.common.BizParam;
import com.hp.bon.sgw.stdbss30.common.BizResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class CommonDynQueryHBBizSlot implements BizSlot {
    private static final Logger _log = LoggerFactory.getLogger(CommonDynQueryHBBizSlot.class);

    @Override
    public BizResult doBiz(XmlMessage xmlMessage, BizParam bizParam) {
        BizResult bizResult = new BizResult();

        try {
            Map<String, Object> msgBody = new HashMap<>();

            String salesIndentId = HttpClientUtils.getXmlValue(xmlMessage,"/Service_Information/Sales_Indent_Id");
            if (salesIndentId.isEmpty() || !salesIndentId.contains("|")) {
                bizResult.setCode(BizConsts.STATUS_ACOUNT_API_FAIL);
                return bizResult;
            }
            String[] split = salesIndentId.split("\\|");

            String objValue = salesIndentId.split("\\|")[0];
            String billingCycleId = salesIndentId.split("\\|")[2];
            msgBody.put("billingCycleId", billingCycleId);


            Map<String, String> operAttrStruct = new HashMap<>();
            operAttrStruct.put("operServiceId", "1");
            operAttrStruct.put("lanId", "8420100");
            operAttrStruct.put("operPost", "0");
            operAttrStruct.put("operOrgId", "0");
            operAttrStruct.put("staffId", "0");
            operAttrStruct.put("operTime", "0");
            msgBody.put("operAttrStruct", operAttrStruct);

            Map<String, String> svcObjectStruct = new HashMap<>();
            svcObjectStruct.put("objValue", objValue);
            svcObjectStruct.put("objAttr", "2");
            svcObjectStruct.put("objType", "3");
            svcObjectStruct.put("dataArea", "0");
            msgBody.put("svcObjectStruct", svcObjectStruct);

            String msgBodyStr = JSON.toJSONString(msgBody);

            //发送请求
            String webserviceUrl = bizParam.getParamString(BizConsts.KEY_ACCOUNT_API_URL);
               _log.info("request body is {}",msgBodyStr.toString());_log.info("request body is {}",msgBodyStr.toString());
String respStr = HttpClientUtils.postHttpStr(msgBodyStr.toString(), webserviceUrl);
_log.info("response is "+respStr.toString());

            if (respStr.equals("")) {
                bizResult.setCode(BizConsts.STATUS_ACOUNT_API_FAIL);
                return bizResult;
            }

            //解析json 拼接报文
            JSONObject json = JSON.parseObject(respStr);
            StringBuffer buffer = new StringBuffer();
            jsonToXmlStr(xmlMessage, json, buffer);


            bizResult.setHttpBody(buffer.toString());
        } catch (Exception e) {
            bizResult.setCode(BizConsts.STATUS_ACOUNT_API_FAIL);
            _log.info(e.toString());
        }
        return bizResult;
    }

    public static void jsonToXmlStr(XmlMessage xmlMessage, JSONObject json, StringBuffer buffer) {
        buffer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        buffer.append("<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">");
        buffer.append("<SOAP-ENV:Header/>");
        buffer.append("<SOAP-ENV:Body>");
        buffer.append("<ns3:SgwQueryAck xmlns:ns3=\"http://www.chinatelecom.cn/SGW/SOAP\">");
        buffer.append("<MID>" + xmlMessage.getMID() + "</MID>");
        buffer.append("<REPTAG>" + xmlMessage.getREPTAG() + "</REPTAG>");
        buffer.append("<RTT>" + xmlMessage.getRTT() + "</RTT>");
        buffer.append("<SIG>" + xmlMessage.getSIG() + "</SIG>");
        buffer.append("<RC>" + xmlMessage.getRC() + "</RC>");
        buffer.append("<DS>" + xmlMessage.getDS() + "</DS>");
        buffer.append("<DATA><![CDATA[<Service_Information>");

        buffer.append("<Result>" + (json.get("resultCode") == null ? "" : json.get("resultCode")) + "</Result>");
        buffer.append("<Para_Field_Result>" + (json.get("resultMsg") == null ? "" : json.get("resultMsg")) + "</Para_Field_Result>");
        buffer.append("<Bill_Information>");
        buffer.append("<State>" + (json.get("stopState") == null ? "" : json.get("stopState")) + "</State>");
        buffer.append("</Bill_Information>");

        buffer.append("</Service_Information>]]></DATA>");
        buffer.append("</ns3:SgwQueryAck>");
        buffer.append("</SOAP-ENV:Body>");
        buffer.append("</SOAP-ENV:Envelope>");
    }

}
